• 検索結果がありません。

ELS1276 Q1100 10 2 Nios® II はじめてガイド GNU コンパイラと Nios® II Software Build Tool | マクニカオンラインサービス ELS1276 Q1100 10 2

N/A
N/A
Protected

Academic year: 2018

シェア "ELS1276 Q1100 10 2 Nios® II はじめてガイド GNU コンパイラと Nios® II Software Build Tool | マクニカオンラインサービス ELS1276 Q1100 10 2"

Copied!
20
0
0

読み込み中.... (全文を見る)

全文

(1)

ALTIMA Corp.

GNU

Nios II Software Build Tool

(2)

GNU

Nios II Software Build Tool

目次

1. ... 3

2. 組込 開発 ... 4

3. GNU make ... 5

3-1. GNU GCC ... 5

3-2. make ... 6

3-3. GCC 最適化 ... 8

3-4. ... 8

4. ン 役割 ン ... 11

4-1. 構造 ン ...11

4-1-1. 構造 ン ...11

4-1-2. 自動生成 ン linker.x ... 14

4-2. ... 17

5. BSP (Board Support Package) ... 18

6. ... 19

7. 参考文献 ... 19

(3)

GNU ン Nios II Software Build Tool

1.

資料 Nios® II Software Build Tool ver 9.1 入 使用 際 GNU

ン や ン 初歩的 概念 体系的 明 資料 Nios II 外 CPU

GNU ン 経験 設計者や 使用 組込 開発

設計者 ALTERA® Quartus® II 用 内容 4章 降 設計者 見

高 内容 含 い 参考 留 い

対象 ン: Quartus II v11.1

(4)

2.

組込

開発

最初 組込 開発 概略 紹

作成

開発環境や 使用 ン 言語 (C/C++) 記述

C/C++ ン

C/C++ ン ン 言語 ン 言語 変換 Nios II Software Build Tool

GNU C/C++ ン ( GCC ) 使用

ン ン 言語 変換

※ FPGA 開発 Quartus II ン ン 異 FPGA / CPLD 書

込 (.sof / .pof ) 生成 行い

ン や 情報 集約 結合 最終的 実行

ELF 生成 Nios II Software Build Tool ELF 拡張子 .elf

表記

ン ROM化 生成

GNU ELF S 変換

Nios II Software Build Tool S 拡張子 .flash 表記

ン 実機動作

Nios II Software Build Tool JTAG (JTAG_UART ) 経由

S RAM 格納 実行 FPGA開発 SOF

書込 相当

ROM 化 書込

Nios II Software Build Tool Flash Programmer JTAG 経由 S

(5)

GNU ン Nios II Software Build Tool

3.

GNU

make

3-1.GNU GCC

GCC GNU Compiler Collection 先頭 3文 GNU C ン 意味 略語

組込 用途 ン 様々 ン 在 昨 最 普及 い

GCC 図3-1 前章 ン GNU 少 踏 込 内容

図3-1. GCC ン ROM化

GNU ン Quartus II 様 ン cpp0 → ン

cc1 → ン as → ン ld 実行 GCC ン ン gcc ン

指定 ば ン 実施 実行 生成 Nios II

Software Build Tool 図3-2 う nios2-elf-gcc ン 提供 ン

ROM化

ROM化 (S , Hex)

実行 ELF

(objcopy)

foo.flash, foo.hex main.c

GCC ン

sub_1.c sub_2.c

main.i sub_1.i sub_2.i

main.s sub_1.s sub_2.s

main.o sub_1.o sub_2.o 必要

foo.elf

ン (cc1)

ン (as) (cpp0)

ン (ld)

(6)

図3-2. gcc ン 例

gcc ン ン 行う cc1 や as 背後 実行 い 確認

図3-3 う ン 指定 ば 段階 踏 ン

図3-3. gcc ン 例

う gcc ン ン 指 あ GCC C ン cc1 区

別 ン ば あ 実際 図3-3 う 単純 無

様々 ンや関連 設定 目 追加 例: -g ン -I ン

3-2.make

gcc 対 複雑 設定 目 毎 設定 用意 所定 記

録 変更 う 組 利用 ば便利 GNU GNU make (gmake) いう

用意 ン ン PATH 様々 設定 毎 管理

毎 設定 いう意味 Quartus II QSF (Quartus II 設定 ) 部

分的 似 い

Nios II Software Build Tool make

Nios II Software Build Tool 毎 make 自動生成 図3-4 make

一部 抜粋 make 作 現実的 あ 精通

方 除 際 自動生成 推奨

[NiosII EDS]$ nios2-elf-gcc foo.c -v

[NiosII EDS]$ nios2-elf-gcc foo.c -v -S [NiosII EDS]$ nios2-elf-gcc foo.c -v -o foo.o

-S ン: cc1 実施

ン 生成

-o ン: as 実施

(7)

GNU ン Nios II Software Build Tool

図3-4. Nios II Software Build Tool 自動生成 make 一部抜粋

Nios II Software Build Tool 作成 make 自動生成 ン

ン ン make あ 移動 図3-5 う make

make all GNU make gcc ン 実行 ELF 生成

ン ン 処理 過程 表示 追う 確認

図3-5. make 例

make 図3-6 う 後 make clean 状態

前 状態 戻 消え

図3-6. make 例

.PHONY : all

all:

@$(ECHO) [$(APP_NAME) build complete]

all : build_pre_process libs app build_post_process

$(OBJ_ROOT_DIR)/%.o: %.c

@$(ECHO) Info: Compiling $< to $@ @$(MKDIR) $(@D)

$(CC) -MP -MMD -c $(APP_CPPFLAGS) $(APP_CFLAGS) -o $@ $<

$(CC_POST_PROCESS)

$(OBJ_ROOT_DIR)/%.o: %.cpp @$(ECHO) Info: Compiling $< to $@ @$(MKDIR) $(@D)

$(CXX) -MP -MMD -c $(APP_CPPFLAGS) $(APP_CXXFLAGS) $(APP_CFLAGS) -o $@ $<

$(CXX_POST_PROCESS)

$(OBJ_ROOT_DIR)/%.o: %.cc

@$(ECHO) Info: Compiling $< to $@ @$(MKDIR) $(@D)

$(CXX) -MP -MMD -c $(APP_CPPFLAGS) $(APP_CXXFLAGS) $(APP_CFLAGS) -o $@ $<

$(CXX_POST_PROCESS)

CROSS_COMPILE := nios2-elf- CC := $(CROSS_COMPILE)gcc -xc CXX := $(CROSS_COMPILE)gcc -xc++ AS := $(CROSS_COMPILE)gcc AR := $(CROSS_COMPILE)ar LD := $(CROSS_COMPILE)g++ NM := $(CROSS_COMPILE)nm RM := rm -f

OBJDUMP := $(CROSS_COMPILE)objdump OBJCOPY := $(CROSS_COMPILE)objcopy STACKREPORT := nios2-stackreport DOWNLOAD := nios2-download FLASHPROG := nios2-flash-programmer ELFPATCH := nios2-elf-insert

MKDIR := mkdir -p

[NiosII EDS]$ make all

(8)

make 複数 ン う 開発 場合 修

ン 見 修 再 ン 既 ン

行い 整合 保 役割 持 い 意味

Quartus II Smart Compilationや ン ン ン 似 い 知

3-3.GCC 最適化

GCC ン ン 中 最適化 ン 紹 Quartus II 様 GCC

ン 考慮 複数 最適化 用意 い

◇ -O :-O1

◇ –O0 :最適化 0

最適化 行い GCC や い 生成

◇ -O1 :最適化 1

ン 実行 間 両方 削減 ン 間

-O0 場合 減 CPU内蔵 汎用 値

保 う 最適化 行わ

◇ -O2 :最適化 2

-O1 最適化 行い ほ 全 最適化 行い ン 間

長 生成 概 高速化

◇ -O3 :最適化 3

-O2 指定 全 最適化 行い 展開や ン ン展開 実施

◇ -Os :最適化 s

-O2 指定 最適化 中 実行 間 削減 優先 最適化

行わ

3-4.

実行 操作 あ Binutils (GNU Binary Utilities)

ば い 表的 紹

◇ objcopy : 表的 使用用途 ROM 化 際 変換 あ

(9)

GNU ン Nios II Software Build Tool

図3-7. objcopy 例

◇ nm : ン 表示 Nios II Software Build Tool

図3-8 う nios2-elf-nm ン 提供 出力 ン

図3-8. nm 例

※ ン :

C言語 変数や関数 定義 実体 利用可能 空間

領域 確保 意味 変数 や関数 確保

領域 あ 言え 関数や変数 単 前

扱わ 前 ン

※ ン :

ン 管理 ン 情報 ン ン ン

実体 配置位置 情報 関数や変数 在

ン 情報 管理 ン 配列 持 い

[NiosII EDS]$ nios2-elf-objcopy -I srec -O ihex foo.flash foo.hex [NiosII EDS]$ nios2-elf-objcopy -O srec foo.elf foo.flash

[NiosII EDS]$ nios2-elf-objcopy -I srec -O binary foo.flash foo.bin

ELF S 変換

S HEX 変換

S 変換

(10)

◇ objdump : 情報 表示 表的 ン 紹

■ --disassemble: 逆 ン 行い ■ --syms: ン 情報 表示

■ --all-header: ELF 情報 表示

■ --source: 逆 ン 元 対比 表示

Nios II Software Build Tool 図3-9 う nios2-elf- objdump ン 提供

図3-9. objdump 例

◇ size : 表示 ン 表示 Nios II Software Build Tool 図3-10

う nios2-elf-size ン 提供

図3-10. size 例

◇ readelf : ELF 情報 情報や ン 情報 表示

Nios II Software Build Tool 図3-11 う nios2-elf- readelf ン 提供

出力 ン

図3-11. readelf 例

[NiosII EDS]$ nios2-elf-objdump --disassemble --syms --all-header --source foo.elf > foo.objdump

[NiosII EDS]$ nios2-elf-size foo.elf

text data bss dec hex filename 67200 7612 532 75344 12650 foo.elf

(11)

GNU ン Nios II Software Build Tool

4.

役割

ン や ン 複数 や 元々 用意 い

複数 ン 結合 ン 指示書 従

や 空間 配置 ン 指示書 ン いい 図3-1 GCC

ン 示 い ン ン 込 ン 作業 行い 最終的

結合 解決 情報 解決 実行 生成 解決

い 資料 割愛

4-1. 構造 ン

C 言語 設計者 作成 作成中

場所 配置 い 問題 厳密 考え い 最後

あ 配置 ば

C言語 構造 + 構成 い 構造 個々

異 性質 持 い 配置場所 別々 考え

4-1-1. 構造 ン

図4-1 性質 異 構造 具体例 簡易的 明 い 記述

変数や関数 ン 段階 う 構造 分類 い 最終的

う 配置 い 図示 い

用途 応 性質 異 領域 分割 い 個々 領域

ン いい ン .bss や .text いう う ン 先頭 .

付 表現

図4-1 初期値 指定 変数や配列 .rwdata ン 分類

変数 無 定数 初期値 指定 専用 .rodata 分類

初期値 持 い配列 .bss ン 分類 main関

数 .text ン 分類 .text ン ROM う

不揮発性 常駐 .rodata ン 専用 不揮発性 配置

.rwdata ン .bss ン RAM う 書 換え可能 揮発性 内 配置

一般的 初期値 無 実 無 着目 .rwdata ン .bss

ン 別々 性質 持 見 両者 RAM 別々 領域 配置 必要 あ

(12)

図4-1. ン 配置 い 様子

基 領域

C言語 領域 確保 要 大雑把 3

領域 分類

◇ 領域: 変数 auto 変数 関数 引数 確保

◇静的記憶領域: 変数 static 変数 確保

◇動的記憶領域: 動的 確保 領域 領域 確保

#include <stdio.h>

#include “system.h”

#define BUFF_SIZE 5

int buff_1[BUFF_SIZE]; ←

int buff_2[BUFF_SIZE]; ←

int buff_3[BUFF_SIZE] = {0, 1, 2, 3, 4 }; ←

const int coeff_1[BUFF_SIZE] = {5,6,7,8,9};←

int main(void) {

int i;

static int a_val; ←

static int b_val = 1; ←

for(i=0; i< BUFF_SIZE; i++) {

a_val = i+1; b_val = i+2;

buff_1[i] = 2*a_val; buff_2[i] = 3*b_val;

buff_3[i]= buff_1[i] + (coeff_1[i])*(buff_2[i]); }

return (0); }

変数

.bss ン

→ 配列変数buff_1

→ 配列変数buff_2 → 変数a_val

.rwdata ン → 配列変数buff_3

→ 変数b_val

.rodata ン

→ 配列定数 coeff_1

変数

見 構造 ン 見 構造

見 構造

.bss ン

.rwdata ン

.text ン

ROM RAM

CPU

.text ン

→ main関数

(13)

GNU ン Nios II Software Build Tool

実行 ELF 外 様々 形式 a.out あ 共通

3 構造 紹

◇ 領域: 配置 専用 禁

◇ 領域: 初期値 持 変数 体 配置 可能 変数

やstatic 変数 配置対象 auto 変数 対象外

◇BSS領域: BSS Block Started by Symbol 略語 あ 初期値 持 い変数 配置

auto 変数 配置 対象外

ELF 出力 GNU ン ン

ELF 出力 GNU 定義 表的 ン 紹

◇ .text ン: 領域 通常ROM 配置

ン ン 外部 RAM 指定 場合 ROM 化 際

Nios II Flash Programmer ALTERA 提供 専用

付加 自動的 行い 後 ROM 書込 後 起動

RAM .text ン

◇ .data ン: 領域 初期値 持 変数 RAM 配置

初期値 持 い 変数 .data ン .common

ン 配置 ン 依

◇ .bss ン: BSS 領域 初期値 持 い変数 RAM 配置

関数内 構造体 動 的記憶領域 配置 領域や malloc() 等 配置

注: malloc() 引数 指定 数 領域 動的 確保

領域 領域内 割 当 ン 依

free() 領域 開放 い 空 容 食い ぶ

い 注意 必要

◇ .rodata ン: 専用 配置 const 言 文 列

主 配置

◇ .common ン: 初期値 持 い 変数 RAM 配置

◇ .stub ン .stubstr ン: GDB 情報 配置

情報や行番号 い 情報 集約 い GDB

GNU 指

◇ .comment ン: や 刻情報 配置

◇ .rwdata ン: 可能 RAM 配置 Nios II Software Build Tool

値0 初期値 見

(14)

◇ . ( ) ン: Nios II Software Build Tool system.h 定義

SOPC Builder ン ン 関連

ン 自動的 定義

例: .ext_flash, .ext_ssram, .ddr_sdram_0

◇ 定義 ン: Nios II Software Build Tool BSP Editor 使用

GUI 任意 定義

4-1-2. 自動生成 ン linker.x

Nios II Software Build Tool linker.x いう ン 生成

後述 bsp 内 生成 linker.x 概 次 う 記述 構成

MEMORY ン

位置 大 定義 ン 領域 使 良い 領域

使 い い 記述 必要 数 定義 様 設定

Nios II Software Build Tool BSP Editor GUI 行う

図4-2. MEMORY ン

OUTPUT_FORMAT ン

出力 や ン ン 指定

MEMORY {

reset : ORIGIN = 0x0, LENGTH = 32

ext_flash : ORIGIN = 0x20, LENGTH = 16777184 ext_ssram : ORIGIN = 0x1000000, LENGTH = 2097152

onchip_ram_BEFORE_EXCEPTION : ORIGIN = 0x2100000, LENGTH = 32 onchip_ram : ORIGIN = 0x2100020, LENGTH = 65504

epcs_controller : ORIGIN = 0x3200000, LENGTH = 2048 ddr_sdram_0 : ORIGIN = 0x4000000, LENGTH = 33554432 }

0x2100020 番地 基 65504

バイ 分の 領域を確保

(15)

GNU ン Nios II Software Build Tool

OUTPUT_ARCH ン

指定

図4-4. OUTPUT_ARCH ン

ENTRY ン

ン ン 設定 ン ン 最初 実行 ン

開始

図4-5. ENTRY ン OUTPUT_ARCH( nios2 )

(16)

SECTIONS ン

ン ンや ン 空間 配置

SECTIONS {

.entry : {

KEEP (*(.entry)) } > reset

.exceptions : {

<< 途中省略 >> } > onchip_ram

.text : {

<< 途中省略 >>

} > ddr_sdram_0 = 0x3a880100

.rodata : {

PROVIDE (__ram_rodata_start = ABSOLUTE(.)); . = ALIGN(4);

*(.rodata .rodata.* .gnu.linkonce.r.*) *(.rodata1)

. = ALIGN(4);

PROVIDE (__ram_rodata_end = ABSOLUTE(.)); } > ddr_sdram_0

<< 途中省略 >>

.rwdata : {

<< 途中省略 >> } > ddr_sdram_0 .bss :

{

<< 途中省略 >> } > ddr_sdram_0 .ext_flash : {

<< 途中省略 >> } > ext_flash .ext_ssram : {

<< 途中省略 >> } > ext_ssram

<< 途中省略 >>

.stab 0 : { *(.stab) } .stabstr 0 : { *(.stabstr) } .stab.excl 0 : { *(.stab.excl) }

<< 途中省略 >> }

ン 対象 全 内

.entry ン

集約 結合 最

終的 MEMORY

ン 定 義

reset領域 .entry

ン 配置

.entry ン 続

い .exceptions

ン→ .text

ン 所定 領域 配置

.rodata ン 開始 __ram_rodata_start

ンボ 設定(開始 現行 位置 ン

値 位置 ンタを4ワ 境界 るよう 調整後

ンク対象の全て ク イ の以下のセク

ョンを集約 結合

.rodata .rodata.* .gnu.linkonce.r.* .rodata1

位置 ンタを4ワ イン後 終了

__ram_rodata_end ンボ 設定(終了 現行

位置 ン 値 結合 4ワ イン

調整した分をインク ン

各 ン

MEMORY

ン 定 義 所 定

領 域 内 記 述

配置

系 ン 記 述 集 約 結合

■ ン . 位置

ン 意味 ン う

初期値 ン

■ ン *

ワ 意味

■ ン ン 定義 C言語 定義 い 変数 や関数 間 ン 衝突 起 可能性

出 防 PROVIDE( ン = 値 ) 利用 内 ン 定義

(17)

GNU ン Nios II Software Build Tool

4-2.

attribute

ン 使用 い 直接 ン 指定 図4-7

う GCC 提供 い 関数 "__attribute__" 機能 使用 特定 変数や関数 任意

ン 配置 可能 ANSI C #pragma あ attribute 機能 使用 強 推奨

図4-7. attribute 使用例

※#pragma:

attribute 機能 様 領域 配置

明示 ン 固 拡張機能 あ CPU

移植 場合 互換性 注意 必要

ン 何 配置 形式 あ ン ld 出力

ン 指定通 空間 配置 う 確認 利用 Nios II

Software Build Tool 図4-8 う nios2-elf- ld ン -M ン 提供 出

力 ン

図4-8. 生成例

int foo_var __attribute__ ((section (".data_tcm"))) = 0;

/* 変数foo_varを .data_tcm セク ョン 配置 */

void bar_func(void* ptr) __attribute__((section (".ext_ssram")));

/* 関数bar_func()を.ext_ssram セク ョン 配置 */

(18)

5.

BSP (Board Support Package)

固 ンや OS 結 ン

BSP ( Board Support Package ) OS や CPU 提供

あ 実体 CPU 特定 OS 実行 必要

や 集合体 Nios II Software Build Tool 場合 SOPC Builder 内

ン ン 用 や HAL 関連 や

BSP 内 展開

図5-1. 階 関係

Nios II Software Build Tool ン や make 設定 最適化 ン等

GCC 関連 各種設定 Nios II Software Build Tool BSP Editor GUI 設定 ン

標準C

HAL API

Nios® II

Nios II Software Build Tool ン

内 格納

各種 や

(19)

GNU ン Nios II Software Build Tool

6.

ver 9.1 入 Nios II Software Build Tool 従来 Nios II IDE 比 GNU や ン

対 設定 柔軟 精通 い 設計者 用 GUI

GNU や ン 概念 考慮 使用 伴う恐 あ 資料 GNU

や ン 概念 持 後 次章 紹 参考文献や専門 通 理解 深

尚 GNU AS IS 無保証 表記 い 不具合 自己解決

いう暗黙 在 扱い 十分 注意 願い

7.

参考文献

1. GNU ン ン

Mike Loukides & Andy Oram 共著 引地美恵子 引地信之 共訳

2. 実例 学ぶ GCC 格的活用法 CQ 出版社

岸哲夫著

3. MAKE 遉人 株式会社 ン

C. ン / A. ン ン / E. ン 共著 川 夫訳

4. 組 込 OS 基礎講 株式会社翔泳社

ン / ン 共著 宇 訳

5. ン 実践開発 CQ 出版社

坂井 弘亮著

(20)

免責 及 利用 注意

弊社 資料 入手 様 記 使用 注意 一 い い 使用 い 1. 資料 非売品 許可無 転売 や無断複製 禁

2. 資料 予告 変更 あ

3. 資料 作成 万全 期 い 万一 不明 や誤 記載漏 気 あ 資料 入手 記 理店 一報い ば幸い

改版

Re visio n 年 概要

図 3-2.    gcc ン 例   gcc  ン ン 行う cc1  や  as  背後 実行 い 確認 図 3-3  う ン 指定 ば 段階 踏 ン 図 3-3.    gcc ン 例 う gcc  ン ン 指 あ GCC  C ン   cc1  区 別 ン ば あ 実際 図 3-3  う 単純 無 様々 ンや関連 設定 目 追加 例:  -g ン -I ン 3-2
図 3-4.    Nios II Software Build Tool 自動生成 make 一部抜粋
図 3-7.    objcopy 例
図 4-1.    ン 配置 い 様子    基 領域    C 言語 領域 確保 要 大雑把 3 領域 分類 ◇ 領域:     変数 auto  変数 関数 引数 確保 ◇静的記憶領域:    変数   static  変数 確保    ◇動的記憶領域:    動的 確保 領域 領域 確保#include &lt;stdio.h&gt;#include “system.h”   #define       BUFF_SIZE   5 int buff_1[BUFF_SIZE]; ←int buff_2[
+3

参照

関連したドキュメント

Further using the Hamiltonian formalism for P II –P IV , it is shown that these special polynomials, which are defined by second order bilinear differential-difference equations,

平成26年の基本方針策定から5年が経過する中で、外国人住民数は、約1.5倍に増

We define the notion of holonomy group for a stable vector bundle F on a variety in terms of the Narasimhan–Seshadri unitary representation of its restriction to curves.. Next we

洋上液化施設及び LNGRV 等の現状と展望を整理するとともに、浮体式 LNG 受入基地 を使用する場合について、LNGRV 等及び輸送用

名称 International Support Vessel Owners' Association (ISOA) 国際サポート船オーナー協会. URL

&amp; Shipyarrd PFIs.. &amp;

パターン 1 は外航 LNG 受入基地から内航 LNG 船を用いて内航 LNG 受入基地に輸送、その 後ローリー輸送で

2)海を取り巻く国際社会の動向